/*
 * Flashlib - QB9 common Flash library
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package com.qb9.flashlib.config
{
	import com.qb9.flashlib.utils.StringUtil;
	
	/**
	 * Simple string conversor to numbers, booleans and null
	 */
	
	// TODO: Support array bracket notation
	
	public final class Evaluator
	{
		private static const DECIMAL:RegExp = /^-?\d+(\.\d+)?$/;
		private static const HEXADECIMAL:RegExp = /^0x[0-9a-f]+$/i;
		
		private static const ESCAPED_NEW_LINE:RegExp = /\\n/g;
		private static const NEW_LINE:String = '\n';
		
		public function Evaluator()
		{
		}
		
		public static function parse(token:String):Object
		{
			token = StringUtil.trim(token);
			
			// Keywords
			switch (token)
			{
				case 'true': return true;
				case 'false': return false;
				case 'undefined':
				case 'null': return null;
			}
			
			if (DECIMAL.test(token))
				return parseFloat(token);

			if (HEXADECIMAL.test(token))
				return parseInt(token,16);
			
			return token.replace(ESCAPED_NEW_LINE, NEW_LINE);
		}

	}
}